#include <cstdio>
#include <unistd.h>
#include <cstdlib>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <cstring>

#define SERVER_IP "127.0.0.1"
#define SERVER_PORT 6666

int main(){
    int cfd;
    struct sockaddr_in serv_addr;
    char buf[BUFSIZ];
    int n;
    
    // 调用socket()生成一个套接字描述符,指定ip版本和协议
    cfd = socket(AF_INET, SOCK_STREAM, 0);//change

    // 对于客户端, 要想地址结构中填充要连接的服务器的地址
    memset(&serv_addr, 0, sizeof(serv_addr));
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_port = htons(SERVER_PORT);
    // 通过inet_pton将点分十进制的IP地址转换至网络字节序的二进制模式,并填充到地址结构当中
    inet_pton(AF_INET, SERVER_IP, &serv_addr.sin_addr.s_addr);

    // 通过connect()将该客户端进程的套接字与地址结构中对应的服务通过三次握手建立TCP连接
    connect(cfd, (struct sockaddr*) &serv_addr, sizeof(serv_addr));

    

    // change


    while(1){
        fgets(buf, sizeof(buf), stdin);//change change

        // 将写入buf缓冲区的数据通过socket的write缓冲区传输给服务器
        write(cfd, buf, strlen(buf));
        // 将服务器传输到read缓冲区的数据进行读取到buf缓冲区当中, 返回值是字节长度
        n = read(cfd, buf, sizeof(buf));
        write(STDOUT_FILENO, buf, n);
    }

    close(cfd);

    return 0;
}